<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    // 实现 (5).add(3).minus(2) == 6

    // Number.prototype.add = function (num) {
    //     return this + num
    // }
    // Number.prototype.minus = function (num) {
    //     return this - num
    // }
    // console.log((5).add(3).minus(2))


    // 实现大小写相互转化
    // let str = 'AabbCCdd'
    // console.log(str)
    // str = str.replace(/[a-zA-Z]/g, content => {
    //     console.log(content)
    //     return content.toUpperCase() === content ? content.toLowerCase() : content.toUpperCase()
    // })
    // console.log(str)


    // 查找字符串
    // let s = 'nihaonibushiren'
    // let t = 'shi'
    // String.prototype.myIndexOf = function (t) {
    //     // 1. 循环方法
    //     // let tLength = t.length
    //     // for (var i = 0; i <= this.length - tLength; i++) {
    //     //     console.log(this[i])
    //     //     if (this.substr(i, tLength) === t) {
    //     //         return i
    //     //     }
    //     // }
    //     // return -1

    //     // 2. 正则表达式
    //     let reg = new RegExp(t)
    //     if (reg.exec(this)) {
    //         return reg.exec(this).index
    //     } else {
    //         return -1
    //     }
    // }
    // console.log(s)
    // console.log(s.myIndexOf(t))


    // 对象key分析
    // // 1
    // var a = {}, b = 123, c = '123'
    // a[b] = 'b'
    // a[c] = 'c'
    // console.log(a[b])
    // 2
    // var a = {}, b = {a: 123}, c= {b: 321}
    // a[b] = 'b'
    // a[c] = 'c'
    // console.log(a[b])


    // 实现一个new函数
    // function Dog (name, say) {
    //     this.name = name
    //     this.saySomething = say
    // }
    // Dog.prototype.say = function () {
    //     console.log('hahah')
    //     console.log('我叫：', this.name)
    //     console.log('我说：', this.saySomething)
    // }
    // let a = new Dog('a', '123')

    // function _new (fn, ...args) {
    //     let obj = {}
    //     fn.call(obj, ...args)
    //     obj.__proto__ = fn.prototype
    //     return obj
    // }

    // let b = _new(Dog, 'b', 'c', 'd')


    // a.say()
    // b.say()
</script>
</body>
</html>